import Vue from 'vue'
import VueRouter from 'vue-router'
import routes from './routes'
import store from '@/store'
Vue.use(VueRouter)
let originPush = VueRouter.prototype.push;  
let originReplace = VueRouter.prototype.replace;
// 解决的方式有两种是 一种是直接传参传入成功的回调和失败的回调
//                   第二种是是重写push|replace 函数
// 解决编程式路由跳转到当前路由(参数不变), 会抛出NavigationDuplicated的警告错误 的问题
// location 路由的路径和传递的参数 
// resolve 成功的回调
// reject 失败的回调
VueRouter.prototype.push = function(location ,resolve,reject){
    if(resolve && reject){
        originPush.call(this,location,resolve,reject);
    }else{
        originPush.call(this,location,()=>{},()=>{});
    }
} 
VueRouter.prototype.replace = function(location,resolve,reject){
    if(resolve && reject){
        // 掉用的时候需要找到调用该方法的实例对象
        originReplace.call(this,location,resolve,reject);
    }else{ 
        originReplace.call(this,location,()=>{},()=>{})
    }
}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
const router = new VueRouter({
    routes,
    scrollBehavior(to, from, savedPosition) {
        //设置Y轴的起点【y属性值没有负数】
        //当然滚动行为也可以设置x轴的
        return {y:0}
   }
})
// 路由守卫
router.beforeEach(async (to,from,next)=>{
    let token = store.state.user.token;
    let name = store.state.user.userInfo.name;
    if(token){
        if(to.path == "/login"){
            next('/home')
        }else{
            if(name){
                next();
            }else{
                try{
                    // 没有用户信息去请求用户信息
                   await store.dispatch('getUserInfo');
                   next();
                }catch(error){
                    // token 过期  就取消用户登录  删除本地存储 并跳转到登录页面
                    await store.dispatch('loginOut');
                    next('/login');
                }
            }
        }
    }else{
        //如果用户未登录：去交易页面trade、去支付页面pay、支付成功页面paysuccess、个人中心 center/myorder  center/grouporder
        // next();
        let toPath = to.path;
        // toPath.indexOf('trade')!=-1  不等与-1 就是路由里面包含该路径  
        if(toPath.indexOf('trade')!=-1||toPath.indexOf('pay')!=-1||toPath.indexOf('center')!=-1){
            // 跳转到登录页面想要跳转到刚才想要访问的页面  需要把刚才的路径写在路由路径上面这样方遍跳转
            next('/login?redirect='+toPath);
        }else{
            next()
        }
    }
})
export default router